package com.indusfo.spc.mapper;

import com.indusfo.spc.pojo.MatVer;
import com.indusfo.spc.pojo.Order;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.aspectj.weaver.ast.Or;

import java.util.List;
import java.util.Map;

public interface OrderMapper {

    /**
     * 新增不判断
     * @param order
     * @return
     */
    int insert(Order order);

    /**
     * 新增判断
     * @param record
     * @return
     */
    int insertSelective(Order record);

    /**
     * 编辑判断
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Order record);

    /**
     * 编辑不判断
     * @param order
     * @return
     */
    int updateOrder(Order order);

    /**
     * 将生产任务单状态改为上次的状态
     * @param orderId
     * @param executeStateId
     * @return
     */
    int updateLastExecuteState(@Param("orderId") Integer orderId,@Param("executeStateId") Integer executeStateId);

    /**
     * 将当前的状态存储到上次的状态中
     * @param ids
     * @return
     */
    int updateByLastExecuteState(@Param("ids") Integer[] ids);

    /**
     * 启用停用删除
     * @param orderIds
     * @param dataState
     * @return
     */
    int updateDataState(@Param("orderIds") Integer[] orderIds, @Param("dataState") Integer dataState);


    /**
     * 查询单个任务单
     * @param orderId
     * @return
     */
    Order queryOrder(@Param("orderId") Integer orderId);
    /**
     * 查询多个
     * @param order
     * @return
     */
    List<Order> queryOrderList(Order order);


    /**
     * 计数
     * @param order
     * @return
     */
    int countOrderList(Order order);

    /**
     * 获取版本信息
     * @param matId
     * @return
     */
    MatVer getVersion(@Param("matId") Integer matId);

    /**
     * 修改完工状态
     * @param ids
     */
    int updatePushDate(@Param("ids") Integer[] ids);

    /**
     * 状态修改
     * @param orderIds
     * @param executeStateId
     * @return
     */
    int executeStateChange(@Param("orderIds") Integer[] orderIds,@Param("executeStateId") Integer executeStateId);
    /**
     * 状态修改并且更新实际结束时间(完工)
     * @param orderIds
     * @param executeStateId
     * @return
     */
    int executeStateAndDateChange(@Param("orderIds") Integer[] orderIds,@Param("executeStateId") Integer executeStateId);
    /**
     * 更新状态同时更新发布时间
     * @param orderIds
     * @param executeStateId
     * @return
     */
    int updateExecuteStateIssue(@Param("orderIds") Integer[] orderIds,@Param("executeStateId") Integer executeStateId);

    /**
     * 查询任务单包含指定产线的个数
     * @param productlineIds
     * @return
     */
    int queryByProductlineIds(@Param("productlineIds") Long[] productlineIds);


    /**
     * 根据任务单id获取当前的任务状态
     * @param order
     */
    int queryExecuteState(Order order);

    /**
     * 客户端的字段查询
     * @param order
     * @return
     */
    List<Order> queryOrderByParam(Order order);

    int countQueryOrderByParam(Order order);

    int queryDistinctOrderNo(Order order);

    /**
     * @Author 熊冰 O
     * @Date 2020/1/13 13:24
     */
	int queryOrderTechCount(Integer orderTechId);

	/**
	 * @Author 熊冰 查询任务id
	 * @Date 2020/1/13 14:45
	 */
    Integer queryOrderIdByOrderTechId(Integer orderTechId);


    List<Order> queryByProductlineId(@Param("productlineId") Integer productlineId);

    /**
     * 查询任务单信息通过任务单id
     * @param orderIds
     * @return
     */
    List<Order> queryOrderListByOrdeId(@Param("orderIds") Integer[] orderIds);

    int updateOrderTech(@Param("orderList") List<Order> orderList);
    /**
     * 查询任务单(任务单流程)
     */
    List<Order> selectOrder(Order order);
    /**
     * 查询任务单计数(任务单流程)
     */
    int countOrder(Order order);

    /**
     * 查询任务单使用的物料
     * @param matIds
     * @return
     */
    int queryUseMat(@Param("matIds") Integer[] matIds);
}